//
//  Common.h
//  YXVideoKit
//
//  Created by Jeakin on 13-10-15.
//  Copyright (c) 2013年 Jeakin. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <CoreMedia/CoreMedia.h>

enum  {
    YXVideoCropTop = 1,
    YXVideoCropMiddle,
    YXVideoCropBottom,
};

typedef NSInteger YXVideoCropType;


/**
 *  设备信息
 *
 *  @return 设备信息
 */

NSString * deviceName();

NSString * getAPPName();

NSString *getAPPVersion();

NSString *getAPPShortVersion();

/**
 *  获得视频信息
 *
 *  @param filePath 视频路径
 *
 *  @return 返回视频信息
 */
NSDictionary * mediaInfo(NSString * filePath);

/**
 *  获得文件大小
 *
 *  @param filePath 视频路径
 *
 *  @return 返回视频大小
 */
long long fileSizeAtPath(NSString* filePath);

/**
 *  生成视频截图并返回路径
 *
 *  @param filePath  视频路径
 *  @param thumbSize 截图大小
 *  @param suffix    截图文件名后缀
 *
 *  @return 返回生成截图的路径
 */
NSString * movieThumb(NSString *filePath,CGSize thumbSize,NSString *suffix,CMTime atTime);

UIImage *thumb(AVAsset *asset,CGSize thumbSize);

/**
 *  生成截图
 *
 *  @param asset     视频AVAsset
 *  @param thumbSize 截图大小
 *  @param thumbPath 截图路径
 */
void assetThumb(AVAsset *asset, CGSize thumbSize, NSString *thumbPath,CMTime atTime);

/**
 *  根据目录生成一个视频路径
 *
 *  @param directoryPath     文件夹路径
 *  @return 返回生成的视频路径
 */
NSString * generateMovieFilePath(NSString *directoryPath);

/**
 *  根据格式生成格式化以后的当前日期
 *
 *  @param format 日期格式:@"yyyy'-'MM'-'dd HH:mm:ss"
 *
 *  @return 格式化以后的日期
 */
NSString * dateFormat(NSString *format);

/**
 *  验证视频是否合乎规则,没有视频轨道||没有音轨||文件损坏
 *
 *  @param URL 视频地址
 *
 *  @return 视频视频是否可以使用
 */
BOOL isVideoValid(NSURL *URL);

void imageSequenceToVideo(NSArray *imageSequence , NSString *filePath);

BOOL imageToVideo(UIImage *image, NSString *filePath, CGFloat duration, int fps);

BOOL imageToVideoWithSize480(UIImage *image, NSString *filePath, CGFloat duration, int fps);

BOOL isCameraAuthorized();

/**
 *
 *
 *  @param videoURL        原始视频的URL
 *  @param targetVideoSize 需要显示的尺寸
 *  @param offset          裁剪的偏移和cropType互斥
 *  @param cropType        裁剪的固定位置和offset互斥
 *
 *  @return 返回一个适合显示范围的矩阵
 */
CGAffineTransform transformationVideo(NSURL *videoURL,CGSize targetVideoSize, CGPoint offset,YXVideoCropType cropType);

/**
 *  获取视频size
 *
 *  @param videoURL 视频文件地址
 *
 *  @return size
 */
CGSize getVideoSize (NSURL *videoURL);

/**
 *  转换CGImage To CVPixelBufferRef
 *
 *  @param image CGImageRef
 *
 *  @return 返回一个处理好的buff
 */
CVPixelBufferRef pixelBufferFromCGImage(CGImageRef image);


/**
 *  通过key=>vlaue 创建queryString
 *
 *  @param dict 键值对字典
 *
 *  @return 反悔querySting
 */
NSString* buildHttpQuery(NSDictionary *dict);


NSString *convertVideoPath(NSString *videoPath);

void commRunOnMainQueueWithoutDeadlocking(void (^block)(void));
void commRunAsynchronouslyOnVideoProcessingQueue(void (^block)(void))
;